package capaPresentacion.client.vista;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

import org.gwtopenmaps.openlayers.client.LonLat;
import org.gwtopenmaps.openlayers.client.Map;
import org.gwtopenmaps.openlayers.client.MapOptions;
import org.gwtopenmaps.openlayers.client.MapWidget;
import org.gwtopenmaps.openlayers.client.Projection;
import org.gwtopenmaps.openlayers.client.Style;
import org.gwtopenmaps.openlayers.client.control.LayerSwitcher;
import org.gwtopenmaps.openlayers.client.control.MousePosition;
import org.gwtopenmaps.openlayers.client.control.NavToolbar;
import org.gwtopenmaps.openlayers.client.control.PanZoomBar;
import org.gwtopenmaps.openlayers.client.control.ScaleLine;
import org.gwtopenmaps.openlayers.client.feature.VectorFeature;
import org.gwtopenmaps.openlayers.client.geometry.LineString;
import org.gwtopenmaps.openlayers.client.geometry.Point;
import org.gwtopenmaps.openlayers.client.layer.Layer;
import org.gwtopenmaps.openlayers.client.layer.OSM;
import org.gwtopenmaps.openlayers.client.layer.Vector;

import capaPresentacion.client.presentador.PresentadorUsuario;
import capaPresentacion.shared.ComentarioDTO;
import capaPresentacion.shared.InfoRutaDTO;
import capaPresentacion.shared.ParPuntosDTO;
import capaPresentacion.shared.RutaDTO;
import capaPresentacion.shared.RutaFicheroDTO;
import capaPresentacion.shared.UsuarioDTO;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.DeckPanel;
import com.google.gwt.user.client.ui.DockPanel;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HasValue;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.MenuBar;
import com.google.gwt.user.client.ui.MenuItem;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.RadioButton;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;

public class VistaUsuario extends Composite implements
		PresentadorUsuario.Display {

	private final Map map;
	private final MapOptions defaultMapOptions;
	private Vector trazoRuta;

	private String amigo;
	private long ruta, info;
	private boolean comentarioInfoRuta;

	private final FlexTable tablaDatos, banerDerecho, banerIzquierdo,
			banerInferior, registrarseTabla, tablaComentario;
	private final TextArea comentarioArea;
	private final Button botonBuscarDialogoRuta, botonBuscarDialogoUsuario,
			botonVerAmigo, botonVerInfoRutaCompleta, botonHacerAmigo,
			botonMostrarRuta, botonEliminarAmigo, botonPublicarComentario,
			aceptarModificacionButton, darBaja;
	private final MenuItem itemMisRutas, itemMisAmigos, itemBuscarRutas,
			itemBuscarUsuarios, itemPerfil, itemLogout;
	private final SimplePanel titulo, icono;
	private final DockPanel panelPrincipal;
	private final HorizontalPanel panelSuperior;
	private final MenuBar panelIzquierdo, panelDerecho;
	private final VerticalPanel panelContenedorDerecho,
			panelContenedorIzquierdo, panelInferior, panelCentral,
			panelEscribirComentario, panelTablas;
	private final DeckPanel panelCentralIntermedio;
	private final TextBox usuarioABuscar, rutaABuscar, nombre, apellidos, edad,
			altura, peso, email;
	private final PasswordTextBox contrasenya1, contrasenya2;

	public VistaUsuario() {

		panelPrincipal = new DockPanel();
		panelSuperior = new HorizontalPanel();
		panelInferior = new VerticalPanel();
		panelIzquierdo = new MenuBar(true);
		panelDerecho = new MenuBar(true);
		panelCentral = new VerticalPanel();
		panelCentralIntermedio = new DeckPanel();
		banerDerecho = new FlexTable();
		banerIzquierdo = new FlexTable();
		banerInferior = new FlexTable();
		panelEscribirComentario = new VerticalPanel();
		panelContenedorDerecho = new VerticalPanel();
		panelContenedorIzquierdo = new VerticalPanel();
		panelTablas = new VerticalPanel();
		titulo = new SimplePanel();
		icono = new SimplePanel();
		tablaDatos = new FlexTable();
		tablaComentario = new FlexTable();
		comentarioArea = new TextArea();
		rutaABuscar = new TextBox();
		usuarioABuscar = new TextBox();
		botonVerAmigo = new Button("Ver");
		botonVerInfoRutaCompleta = new Button("Ver");
		botonBuscarDialogoRuta = new Button("Buscar");
		botonBuscarDialogoUsuario = new Button("Buscar");
		botonHacerAmigo = new Button("Seguir");
		botonMostrarRuta = new Button("Mostrar");
		botonEliminarAmigo = new Button("Eliminar");
		botonPublicarComentario = new Button("Publicar");
		registrarseTabla = new FlexTable();
		nombre = new TextBox();
		apellidos = new TextBox();
		email = new TextBox();
		edad = new TextBox();
		altura = new TextBox();
		peso = new TextBox();
		contrasenya1 = new PasswordTextBox();
		contrasenya2 = new PasswordTextBox();
		aceptarModificacionButton = new Button("Aceptar");
		darBaja = new Button("Dar Baja");

		itemMisRutas = new MenuItem("Mis Rutas", new Command() {

			@Override
			public void execute() {
				verMisRutas();
			}
		});
		itemMisAmigos = new MenuItem("Siguiendo", new Command() {

			@Override
			public void execute() {
				verMisAmigos();
			}
		});
		itemBuscarRutas = new MenuItem("Buscar Rutas", new Command() {

			@Override
			public void execute() {
				ruta = -1;
				info = -1;
				amigo = "Ninguno";
				busquedaRuta();
			}
		});
		itemBuscarUsuarios = new MenuItem("Buscar Usuarios", new Command() {
			@Override
			public void execute() {
				ruta = -1;
				info = -1;
				amigo = "Ninguno";
				busquedaUsuario();
			}
		});
		itemPerfil = new MenuItem("Mis Datos", new Command() {

			@Override
			public void execute() {
				modificarDatos();
			}
		});
		itemLogout = new MenuItem("Salir", new Command() {

			@Override
			public void execute() {
				logout();
			}
		});

		// Opciones del mapa
		defaultMapOptions = new MapOptions();
		defaultMapOptions.removeDefaultControls();
		defaultMapOptions.setNumZoomLevels(3);
		defaultMapOptions.setProjection("EPSG:4326");
		MapWidget mapWidget = new MapWidget("600px", "400px", defaultMapOptions);
		map = mapWidget.getMap();
		// Capas del mapa
		OSM osm_1 = OSM.Mapnik("Mapnik");
		OSM osm_2 = OSM.CycleMap("CycleMap");
		osm_1.setIsBaseLayer(true);
		osm_2.setIsBaseLayer(true);
		map.addLayers(new Layer[] { osm_1, osm_2 });
		// Controles del mapa
		map.addControl(new PanZoomBar());
		map.addControl(new NavToolbar());
		map.addControl(new MousePosition());
		map.addControl(new LayerSwitcher());
		map.addControl(new ScaleLine());
		// Posicion inicial y zoom
		double lon = -659221;
		double lat = 4478693;
		int zoom = 13;
		map.setCenter(new LonLat(lon, lat), zoom);

		itemBuscarRutas.getElement().setId("item1");
		itemBuscarUsuarios.getElement().setId("item2");
		itemLogout.getElement().setId("item3");
		itemPerfil.getElement().setId("item4");
		itemMisAmigos.getElement().setId("item5");
		itemMisRutas.getElement().setId("item6");

		panelContenedorIzquierdo.getElement().setId("panelIzquierdo");
		panelContenedorDerecho.getElement().setId("panelDerecho");
		panelCentral.getElement().setId("panelCentral");

		titulo.add(new Image("images/Titulo.png"));
		icono.add(new Image(
				"images/IconoPequeno.png"));

		ruta = -1;
		info = -1;
		amigo = "Ninguno";
		comentarioInfoRuta = true;

		banerDerecho.setWidth("150px");
		banerIzquierdo.setWidth("150px");
		panelCentral.setWidth("600px");
		panelInferior.setHeight("150px");
		panelDerecho.setWidth("150px");
		panelDerecho.setHeight("394px");
		panelSuperior.setHeight("110px");
		panelIzquierdo.setWidth("150px");
		panelIzquierdo.setHeight("394px");
		icono.setHeight("110px");
		icono.setWidth("160px");
		titulo.setHeight("110px");
		titulo.setWidth("600px");
		comentarioArea.setWidth("590px");
		comentarioArea.setHeight("100px");
		tablaDatos.setWidth("590px");

		registrarseTabla.setText(0, 0, "Nombre: ");
		registrarseTabla.setText(1, 0, "Apellidos: ");
		registrarseTabla.setText(2, 0, "Email: ");
		registrarseTabla.setText(3, 0, "Contraseña: ");
		registrarseTabla.setText(4, 0, "Repita Contraseña: ");
		registrarseTabla.setText(5, 0, "Edad: ");
		registrarseTabla.setText(6, 0, "Altura (cm): ");
		registrarseTabla.setText(7, 0, "Peso (kg): ");

		registrarseTabla.setWidget(0, 1, nombre);
		registrarseTabla.setWidget(1, 1, apellidos);
		registrarseTabla.setWidget(2, 1, email);
		registrarseTabla.setWidget(3, 1, contrasenya1);
		registrarseTabla.setWidget(4, 1, contrasenya2);
		registrarseTabla.setWidget(5, 1, edad);
		registrarseTabla.setWidget(6, 1, altura);
		registrarseTabla.setWidget(7, 1, peso);
		registrarseTabla.setWidget(8, 1, aceptarModificacionButton);
		registrarseTabla.setWidget(8, 2, darBaja);

		banerInferior.setText(0, 75,
				"2012 PFC World's Trainer | J.D. del Moral | R. González");

		panelInferior.add(banerInferior);
		panelInferior.setCellHorizontalAlignment(banerInferior,
				HasHorizontalAlignment.ALIGN_CENTER);
		panelInferior.setCellVerticalAlignment(banerInferior,
				HasVerticalAlignment.ALIGN_MIDDLE);

		panelDerecho.addItem(itemPerfil);
		panelDerecho.addItem(itemLogout);

		panelSuperior.add(icono);
		panelSuperior.add(titulo);
		panelSuperior.setCellHorizontalAlignment(icono,
				HasHorizontalAlignment.ALIGN_CENTER);
		panelSuperior.setCellVerticalAlignment(icono,
				HasVerticalAlignment.ALIGN_BOTTOM);
		panelSuperior.setCellHorizontalAlignment(titulo,
				HasHorizontalAlignment.ALIGN_CENTER);

		panelIzquierdo.addItem(itemMisRutas);
		panelIzquierdo.addItem(itemMisAmigos);
		panelIzquierdo.addItem(itemBuscarRutas);
		panelIzquierdo.addItem(itemBuscarUsuarios);

		panelTablas.add(tablaDatos);
		panelTablas.add(tablaComentario);

		panelCentralIntermedio.add(panelTablas);
		panelCentralIntermedio.add(registrarseTabla);

		panelEscribirComentario.add(comentarioArea);
		panelEscribirComentario.add(botonPublicarComentario);
		panelEscribirComentario.setVisible(false);

		panelCentral.add(mapWidget);
		panelCentral.add(panelCentralIntermedio);
		panelCentral.add(panelEscribirComentario);

		panelContenedorDerecho.add(panelDerecho);

		panelContenedorIzquierdo.add(panelIzquierdo);

		panelPrincipal.add(banerIzquierdo, DockPanel.WEST);
		panelPrincipal.add(banerDerecho, DockPanel.EAST);
		panelPrincipal.add(panelSuperior, DockPanel.NORTH);
		panelPrincipal.add(panelInferior, DockPanel.SOUTH);
		panelPrincipal.add(panelContenedorIzquierdo, DockPanel.WEST);
		panelPrincipal.add(panelContenedorDerecho, DockPanel.EAST);
		panelPrincipal.add(panelCentral, DockPanel.CENTER);

		initWidget(panelPrincipal);
	}

	@Override
	public MenuItem verMisRutas() {
		return itemMisRutas;
	}

	@Override
	public MenuItem verMisAmigos() {
		return itemMisAmigos;
	}

	@Override
	public MenuItem logout() {
		return itemLogout;
	}

	@Override
	public HasClickHandlers botonDarBaja() {
		return darBaja;
	}

	@Override
	public HasClickHandlers botonVerAmigo() {
		return botonVerAmigo;
	}

	@Override
	public HasClickHandlers botonVerInfoRutaCompleta() {
		return botonVerInfoRutaCompleta;
	}

	@Override
	public HasClickHandlers botonBuscarDialogoRuta() {
		return botonBuscarDialogoRuta;
	}

	@Override
	public HasClickHandlers botonBuscarDialogoUsuario() {
		return botonBuscarDialogoUsuario;
	}

	@Override
	public HasClickHandlers botonMostrarRuta() {
		return botonMostrarRuta;
	}

	@Override
	public HasClickHandlers botonHacerAmigo() {
		return botonHacerAmigo;
	}

	@Override
	public MenuItem modificarDatos() {
		return itemPerfil;
	}

	@Override
	public HasClickHandlers aceptarModificacionDatos() {
		return aceptarModificacionButton;
	}

	@Override
	public HasClickHandlers botonEliminarAmigo() {
		return botonEliminarAmigo;
	}

	@Override
	public HasClickHandlers botonPublicarComentario() {
		return botonPublicarComentario;
	}

	@Override
	public HasValue<String> getNombreRutaBusqueda() {
		return rutaABuscar;
	}

	@Override
	public HasValue<String> getNombreUsuarioBusqueda() {
		return usuarioABuscar;
	}

	@Override
	public String idAmigo() {
		return amigo;
	}

	@Override
	public long idRuta() {
		return ruta;
	}

	@Override
	public long idInfo() {
		return info;
	}

	@Override
	public boolean comentarioInfoRuta() {
		return comentarioInfoRuta;
	}

	@Override
	public HasValue<String> getNombre() {
		return nombre;
	}

	@Override
	public HasValue<String> getApellidos() {
		return apellidos;
	}

	@Override
	public HasValue<String> getEmail() {
		return email;
	}

	@Override
	public HasValue<String> getContrasenya1() {
		return contrasenya1;
	}

	@Override
	public HasValue<String> getContrasenya2() {
		return contrasenya2;
	}

	@Override
	public HasValue<String> getPeso() {
		return peso;
	}

	@Override
	public HasValue<String> getAltura() {
		return altura;
	}

	@Override
	public HasValue<String> getEdad() {
		return edad;
	}

	@Override
	public HasValue<String> areaComentario() {
		return comentarioArea;
	}

	@Override
	public void resetAreaComentario() {
		comentarioArea.setText("");
	}

	@Override
	public void mostrarMisAmigos(List<UsuarioDTO> amigos) {
		tablaDatos.clear(true);
		tablaComentario.clear(true);
		panelEscribirComentario.setVisible(false);
		amigo = "Ninguno";
		info = -1;
		if (map.getLayerByName("Ruta") != null)
			map.removeLayer(trazoRuta);
		tablaDatos.setText(1, 0, "Nombre");
		tablaDatos.setText(1, 1, "Apellidos");
		tablaDatos.setText(1, 2, "Email");
		int i = 2;
		for (final UsuarioDTO usuarioDTO : amigos) {
			tablaDatos.setText(i, 0, usuarioDTO.getNombre());
			tablaDatos.setText(i, 1, usuarioDTO.getApellidos());
			tablaDatos.setText(i, 2, usuarioDTO.getEmail());
			RadioButton radioButtonAmigos = new RadioButton("radioButtonAmigos");
			tablaDatos.setWidget(i, 3, radioButtonAmigos);
			radioButtonAmigos.addClickHandler(new ClickHandler() {

				@Override
				public void onClick(ClickEvent event) {
					amigo = usuarioDTO.getEmail();
				}
			});
			tablaDatos.setWidget(i + 1, 3, botonVerAmigo);
			tablaDatos.setWidget(i + 1, 2, botonEliminarAmigo);
			i++;
		}
		panelCentralIntermedio.showWidget(0);
	}

	@Override
	public void mostrarRutas(List<InfoRutaDTO> infoRuta) {
		tablaDatos.clear(true);
		tablaComentario.clear(true);
		panelEscribirComentario.setVisible(false);
		ruta = -1;
		info = -1;
		comentarioInfoRuta = true;
		if (map.getLayerByName("Ruta") != null)
			map.removeLayer(trazoRuta);
		tablaDatos.setText(1, 0, "Nombre");
		tablaDatos.setText(1, 1, "Distancia");
		tablaDatos.setText(1, 2, "Duracion");
		tablaDatos.setText(1, 3, "Tipo");
		int i = 2;
		for (final InfoRutaDTO infoRutaDTO : infoRuta) {
			tablaDatos.setText(i, 0, infoRutaDTO.getRuta().getNombre());
			tablaDatos.setText(
					i,
					1,
					String.valueOf(getDecimal(infoRutaDTO.getRuta()
							.getDistancia())) + " km");
			tablaDatos.setText(i, 2, tratarTiempo(infoRutaDTO.getDuracion()));
			tablaDatos.setText(i, 3, infoRutaDTO.getRuta().getTipo());
			RadioButton radioButtonInfoRutaAmigo = new RadioButton(
					"radioButtonInfoRutaAmigo");
			tablaDatos.setWidget(i, 4, radioButtonInfoRutaAmigo);
			radioButtonInfoRutaAmigo.addClickHandler(new ClickHandler() {

				@Override
				public void onClick(ClickEvent event) {
					info = infoRutaDTO.getId();
					ruta = infoRutaDTO.getRuta().getId();
				}
			});
			tablaDatos.setWidget(i + 1, 3, botonVerInfoRutaCompleta);
			i++;
		}
		panelCentralIntermedio.showWidget(0);
	}

	@Override
	public void mostrarInfoRutaCompleta(RutaFicheroDTO infoRuta) {
		tablaDatos.clear(true);
		tablaComentario.clear(true);
		tablaDatos.setText(1, 0, "Nombre");
		tablaDatos.setText(1, 1, "Distancia");
		tablaDatos.setText(1, 2, "Duracion");
		tablaDatos.setText(1, 3, "Calorias");
		tablaDatos.setText(1, 4, "Vel. maxima");
		tablaDatos.setText(1, 5, "Vel. media");
		tablaDatos.setText(1, 6, "Tipo");
		tablaDatos.setText(2, 0, infoRuta.getRuta().getNombre());
		tablaDatos.setText(2, 1,
				String.valueOf(getDecimal(infoRuta.getRuta().getDistancia()))
						+ " km");
		tablaDatos.setText(2, 2, tratarTiempo(infoRuta.getInfoRuta()
				.getDuracion()));
		tablaDatos.setText(2, 3,
				String.valueOf((int) infoRuta.getInfoRuta().getCalorias())
						+ " cal");
		String tipo = infoRuta.getRuta().getTipo();
		tablaDatos.setText(2, 6, tipo);
		if (tipo.equals("Ciclismo")) {
			tablaDatos.setText(
					2,
					4,
					String.valueOf(getDecimal(infoRuta.getInfoRuta()
							.getVelocidadMaxima())) + " km/h");
			tablaDatos.setText(
					2,
					5,
					String.valueOf(getDecimal(infoRuta.getInfoRuta()
							.getVelocidadMedia())) + " km/h");
		} else {
			tablaDatos.setText(
					2,
					4,
					String.valueOf(getDecimal(infoRuta.getInfoRuta()
							.getVelocidadMaxima())) + " min/km");
			tablaDatos.setText(
					2,
					5,
					String.valueOf(getDecimal(infoRuta.getInfoRuta()
							.getVelocidadMedia())) + " min/km");
		}
		pintarRuta(infoRuta.getPuntos());
		panelCentralIntermedio.showWidget(0);
	}

	@Override
	public void buscarRuta(List<RutaDTO> rutasDTO) {
		panelEscribirComentario.setVisible(false);
		tablaDatos.clear(true);
		tablaComentario.clear(true);
		ruta = -1;
		info = -1;
		if (map.getLayerByName("Ruta") != null)
			map.removeLayer(trazoRuta);
		tablaDatos.setText(2, 1, "Nombre");
		tablaDatos.setText(2, 2, "Distancia");
		tablaDatos.setText(2, 3, "Tipo");
		int i = 3;
		for (final RutaDTO rutaDTO : rutasDTO) {
			tablaDatos.setText(i, 1, rutaDTO.getNombre());
			tablaDatos.setText(i, 2,
					String.valueOf(getDecimal(rutaDTO.getDistancia())) + " km");
			tablaDatos.setText(i, 3, rutaDTO.getTipo());
			RadioButton radioButtonRuta = new RadioButton("radioButtonRuta");
			tablaDatos.setWidget(i, 4, radioButtonRuta);
			radioButtonRuta.addClickHandler(new ClickHandler() {

				@Override
				public void onClick(ClickEvent event) {
					ruta = rutaDTO.getId();
				}
			});
			i++;
		}
		tablaDatos.setWidget(i + 1, 4, botonMostrarRuta);
		panelCentralIntermedio.showWidget(0);
	}

	@Override
	public void buscarUsuario(List<UsuarioDTO> usuariosDTO,
			List<UsuarioDTO> amigosDTO, String email) {
		panelEscribirComentario.setVisible(false);
		tablaDatos.clear(true);
		if (map.getLayerByName("Ruta") != null)
			map.removeLayer(trazoRuta);
		tablaDatos.setText(2, 1, "Nombre");
		tablaDatos.setText(2, 2, "Apellidos");
		List<String> amigos = new LinkedList<String>();
		for (UsuarioDTO usuario : amigosDTO)
			amigos.add(usuario.getEmail());
		int i = 3;
		for (final UsuarioDTO usuarioDTO : usuariosDTO) {
			if (!usuarioDTO.getEmail().equals(email)) {
				tablaDatos.setText(i, 1, usuarioDTO.getNombre());
				tablaDatos.setText(i, 2, usuarioDTO.getApellidos());
				if (!amigos.contains(usuarioDTO.getEmail())) {
					RadioButton radioButton = new RadioButton(
							"radioButtonUsuario");
					tablaDatos.setWidget(i, 4, radioButton);
					radioButton.addClickHandler(new ClickHandler() {

						@Override
						public void onClick(ClickEvent event) {
							amigo = usuarioDTO.getEmail();
						}
					});
				}
				i++;
			}
		}
		tablaDatos.setWidget(i + 1, 4, botonHacerAmigo);
		panelCentralIntermedio.showWidget(0);
	}

	@Override
	public void mostrarRuta(RutaFicheroDTO result) {
		amigo = "Ninguno";
		info = -1;
		comentarioInfoRuta = false;
		tablaDatos.clear(true);
		tablaComentario.clear(true);
		tablaDatos.setText(1, 0, "Nombre");
		tablaDatos.setText(1, 1, "Distancia");
		tablaDatos.setText(1, 2, "Tipo");
		tablaDatos.setText(2, 0, result.getRuta().getNombre());
		tablaDatos.setText(2, 1,
				String.valueOf(getDecimal(result.getRuta().getDistancia()))
						+ " km");
		tablaDatos.setText(2, 2, result.getRuta().getTipo());
		pintarRuta(result.getPuntos());
		panelCentralIntermedio.showWidget(0);
	}

	@SuppressWarnings("deprecation")
	@Override
	public void mostrarComentariosDeRuta(List<ComentarioDTO> comentarios) {
		tablaComentario.setText(0, 0, "Comentarios");
		tablaComentario.setText(1, 0, "Fecha");
		tablaComentario.setText(1, 1, "Usuario");
		tablaComentario.setText(1, 2, "Comentario");
		int i = 2;
		for (ComentarioDTO comentarioDTO : comentarios) {
			tablaComentario.setText(i, 0, comentarioDTO.getFecha()
					.toGMTString());
			tablaComentario.setText(i, 1, comentarioDTO.getUsuario()
					.getNombre());
			tablaComentario.setText(i, 2, comentarioDTO.getTexto());
			i++;
		}
		tablaComentario.setText(i + 1, 0, "Comenta aquí:");
		panelEscribirComentario.setVisible(true);
	}

	@Override
	public void verModificarDatos(UsuarioDTO usuario) {
		panelEscribirComentario.setVisible(false);
		nombre.setValue(usuario.getNombre());
		apellidos.setValue(usuario.getApellidos());
		email.setValue(usuario.getEmail());
		email.setEnabled(false);
		contrasenya1.setValue(usuario.getContrasenya());
		contrasenya2.setValue(usuario.getContrasenya());
		peso.setValue(String.valueOf(usuario.getPeso()));
		altura.setValue(String.valueOf(usuario.getAltura()));
		edad.setValue(String.valueOf(usuario.getEdad()));
		panelCentralIntermedio.showWidget(1);
	}

	private void pintarRuta(List<ParPuntosDTO> listaPuntos) {
		trazoRuta = new Vector("Ruta");
		List<Point> points = new ArrayList<Point>();
		Point arrayPuntos[];
		int zoom = 13;
		double lon = listaPuntos.get(0).getLongitud();
		double lat = listaPuntos.get(0).getLatitud();
		for (ParPuntosDTO p : listaPuntos) {
			double x = p.getLatitud();
			double y = p.getLongitud();
			Point point = new Point(y, x);
			points.add(point);
		}
		arrayPuntos = new Point[listaPuntos.size()];
		Projection source = new Projection("EPSG:4326");
		Projection dest = new Projection("EPSG:900913");
		for (int i = 0; i < listaPuntos.size(); i++) {
			points.get(i).transform(source, dest);
			arrayPuntos[i] = points.get(i);
		}
		LineString puntos = new LineString(arrayPuntos);
		Style style = new Style();
		style.setStrokeColor("#FF0000");
		style.setStrokeWidth(2);
		VectorFeature feature = new VectorFeature(puntos, style);
		trazoRuta.addFeature(feature);
		map.addLayers(new Layer[] { trazoRuta });
		LonLat l = new LonLat(lon, lat);
		l.transform("EPSG:4326", "EPSG:900913");
		map.setCenter(l, zoom);

	}

	protected void busquedaUsuario() {
		if (map.getLayerByName("Ruta") != null)
			map.removeLayer(trazoRuta);
		panelEscribirComentario.setVisible(false);
		tablaDatos.clear(true);
		tablaComentario.clear(true);
		tablaDatos.setText(1, 1, "Nombre usuario a buscar: ");
		tablaDatos.setWidget(2, 1, usuarioABuscar);
		tablaDatos.setWidget(2, 2, botonBuscarDialogoUsuario);
		panelCentralIntermedio.showWidget(0);
	}

	protected void busquedaRuta() {
		if (map.getLayerByName("Ruta") != null)
			map.removeLayer(trazoRuta);
		panelEscribirComentario.setVisible(false);
		tablaDatos.clear(true);
		tablaComentario.clear(true);
		tablaDatos.setText(1, 1, "Nombre ruta a buscar: ");
		tablaDatos.setWidget(2, 1, rutaABuscar);
		tablaDatos.setWidget(2, 2, botonBuscarDialogoRuta);
		panelCentralIntermedio.showWidget(0);
	}

	protected double getDecimal(double decimal) {
		decimal = decimal * (java.lang.Math.pow(10, 2));
		decimal = java.lang.Math.round(decimal);
		decimal = decimal / java.lang.Math.pow(10, 2);
		return decimal;
	}

	protected String tratarTiempo(double milseg) {
		int hora = (int) (milseg / 3600000);
		int restoHora = (int) (milseg % 3600000);
		int min = restoHora / 60000;
		int restoMin = restoHora % 60000;
		int seg = restoMin / 1000;
		return hora + ":" + min + ":" + seg;
	}
}
